package com.zboot.zbootadmin.project.system.menu.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.zboot.zbootadmin.project.system.menu.entity.SysMenu;
import com.zboot.zbootadmin.project.system.menu.entity.vo.MenuVo;
import com.zboot.zbootadmin.project.system.menu.entity.vo.RouterVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author zyt
 * @since 2020-07-18
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     *
     * @Description: 构建菜单
     *
     * @author: zyt
     * @date: 14:21 2020/9/14
     * @param: [menus]
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.vo.RouterVo>
     *
     */
    List<RouterVo> buildMenu(List<SysMenu> menus);

    /**
     *
     * @Description: 获取菜单列表，递归用
     *
     * @author: zyt
     * @date: 14:22 2020/9/14
     * @param: [parentId, menus]
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.SysMenu>
     *
     */
    List<SysMenu> getMenuList(Long parentId, List<SysMenu> menus);
    /*List<SysMenu> getChildren(Long id, List<SysMenu> menus);*/
    /**
     *
     * @Description: 管理员菜单列表
     *
     * @author: zyt
     * @date: 16:38 2020/8/1
     * @param: []
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.SysMenu>
     *
     */
    List<SysMenu> selectMenuList();

    /**
     *
     * @Description: 递归按父id查询菜单
     *
     * @author: zyt
     * @date: 15:59 2020/9/6
     * @param: []
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.SysMenu>
     *
     */
    List<SysMenu>  queryByParentId(SysMenu menu,Long parentId);

    /**
     *
     * @Description: 用户菜单
     *
     * @author: zyt
     * @date: 14:28 2020/9/14
     * @param: [userId]
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.SysMenu>
     *
     */
    List<SysMenu> selectMenuListByUserId(String userId);

    /**
     *
     * @Description: 添加菜单
     *
     * @author: zyt
     * @date: 16:22 2020/10/1
     * @param: [sysMenu]
     * @return: void
     *
     */
    void addMenu(SysMenu sysMenu);

    /**
     *
     * @Description: 此方法用于显示菜单列表
     *
     * @author: zyt
     * @date: 23:11 2020/10/30
     * @param: [menus]
     * @return: java.util.List<com.zboot.zbootadmin.project.system.menu.entity.vo.MenuVo>
     *
     */
    List<MenuVo> showMenuList(List<SysMenu> menus);

    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> selectMenuPermsByUserId(Long userId);
}
